package br.com.oficicar.entidades;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;


/** 
 * Bean que representa uma permissão específica do sistema. Ex: Funcionalidade.cadastrar + Modulo.Funcionario
 */
@Entity
public class Permissao implements Entidade {

	/**
	 * @uml.property  name="id"
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="permissao_id")
	private Long id;

	/**
	 * @uml.property  name="funcionalidade"
	 * @uml.associationEnd  multiplicity="(1 1)"
	 */
	@ManyToOne
	private Funcionalidade funcionalidade = new Funcionalidade();

	/** 
	 * @uml.property name="modulo"
	 * @uml.associationEnd inverse="permissao:br.com.vendaext.gerencial.entidades.Modulo"
	 */
	@ManyToOne
	private Modulo modulo = new Modulo();

	/**
	 * @uml.property  name="descricao"
	 */
	@Column
	private String descricao;

	/**
	 * Getter of the property <tt>descricao</tt>
	 * @return  Returns the descricao.
	 * @uml.property  name="descricao"
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * Getter of the property <tt>funcionalidade</tt>
	 * @return   Returns the funcionalidade.
	 * @uml.property  name="funcionalidade"
	 */
	public Funcionalidade getFuncionalidade() {
		return funcionalidade;
	}

	/**
	 * Getter of the property <tt>id</tt>
	 * @return   Returns the id.
	 * @uml.property  name="id"
	 */
	public Long getId() {
		return id;
	}

	/** 
	 * Getter of the property <tt>modulo</tt>
	 * @return   Returns the modulo.
	 * @uml.property  name="modulo"
	 */
	public Modulo getModulo() {
		return modulo;
	}

	/**
	 * Setter of the property <tt>descricao</tt>
	 * @param descricao  The descricao to set.
	 * @uml.property  name="descricao"
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * Setter of the property <tt>funcionalidade</tt>
	 * @param funcionalidade   The funcionalidade to set.
	 * @uml.property  name="funcionalidade"
	 */
	public void setFuncionalidade(Funcionalidade funcionalidade) {
		this.funcionalidade = funcionalidade;
	}

	/**
	 * Setter of the property <tt>id</tt>
	 * @param id   The id to set.
	 * @uml.property  name="id"
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/** 
	 * Setter of the property <tt>modulo</tt>
	 * @param modulo   The modulo to set.
	 * @uml.property  name="modulo"
	 */
	public void setModulo(Modulo modulo) {
		this.modulo = modulo;
	}

	@Override
	public boolean equals(Object arg0) {
		Permissao obj = (Permissao) arg0;
		if (this.getId()!=null && obj.getId()!=null && this.getId().equals(obj.getId()) )
			return true;
		else
			return false;
	}

}
